Bug 2783

Bug Description:

This is a starvation bug.
Main thread holds a lock and causes "Lucene Merge Thread #2" waiting for the lock.
But then Main thread itself goes to wait.
So both threads are in wait state as shown in the following stack trace.

	
"Lucene Merge Thread #2" daemon prio=6 tid=0x0000000007992000 nid=0x20c0 waiting for monitor entry [0x0000000007d9f000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.apache.lucene.index.IndexWriter.commit(IndexWriter.java:4143)
- waiting to lock <0x00000000ec270458> (a java.lang.Object)
at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:5279)
at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4675)
at org.apache.lucene.index.ConcurrentMergeScheduler.doMerge(ConcurrentMergeScheduler.java:235)
at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:291)

"main" prio=6 tid=0x000000000056c800 nid=0x2dc0 in Object.wait() [0x000000000252e000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000000ec299108> (a org.apache.lucene.index.ConcurrentMergeScheduler)
at java.lang.Object.wait(Object.java:485)
at org.apache.lucene.index.ConcurrentMergeScheduler.merge(ConcurrentMergeScheduler.java:200)
- locked <0x00000000ec299108> (a org.apache.lucene.index.ConcurrentMergeScheduler)
at org.apache.lucene.index.IndexWriter.maybeMerge(IndexWriter.java:3070)
at org.apache.lucene.index.IndexWriter.maybeMerge(IndexWriter.java:3065)
at org.apache.lucene.index.IndexWriter.maybeMerge(IndexWriter.java:3061)
at org.apache.lucene.index.IndexWriter.flush(IndexWriter.java:4256)
at org.apache.lucene.index.IndexWriter.prepareCommit(IndexWriter.java:4133)
at org.apache.lucene.index.IndexWriter.commit(IndexWriter.java:4206)
- locked <0x00000000ec270458> (a java.lang.Object)
at org.apache.lucene.index.IndexWriter.commit(IndexWriter.java:4179)
at org.apache.lucene.index.TestAtomicUpdate.runTest(TestAtomicUpdate.java:139)
at org.apache.lucene.index.TestAtomicUpdate.testAtomicUpdates(TestAtomicUpdate.java:187)
More details about this bug are at LUCENE-2783 JIRA page.

How To Reproduce:

This bug is reproduced under lucene 4.3.0 and JDK 1.6.0_33.
Execute the following scripts to run the test to reproduce the bug (assume the location of the lucene test project is lucene_test_home).

Linux:
${lucene_test_home}/scripts/2783.sh
Windows:
%lucene_test_home%\scripts\2783.bat